package com.gmail.bloim.serg.acm;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Deque;
import java.util.Iterator;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * User: Администратор
 * Date: 25.04.13
 * Time: 11:18
 * To change this template use File | Settings | File Templates.
 */
public class Program {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int res = solve(in);
        out.print(res);
//        printPoints(out);
        out.flush();
        out.close();
    }

    private static int solve(Scanner in) {
        int pointsNum = in.nextInt();
        if (pointsNum == 0)
            return 0;
        if (pointsNum == 1)
            return 1;
        if (pointsNum == 2)
            return 2;
        Global.init(pointsNum);
        readPointsArray(in, pointsNum);
        return processPoints();
    }

    private static void extendLine(Line line) {
        Iterator<Point> pointIterator = Global.points.iterator();
        while (pointIterator.hasNext()) {
            Point point = pointIterator.next();
            if (line.match(point)) {
                line.add(point);
                pointIterator.remove();
            }
        }
    }

    private static Line searchLongestLine() {
        int maxSize = 0;
        Line maxLine = null;
        for (Line line : Global.lines) {
            if (line.pointSize() > maxSize) {
                maxLine = line;
                maxSize = line.pointSize();
            }
        }
        return maxLine;
    }

    private static int processPoints() {
        int maxLength = 0;
        Point[] points = Global.pointsArray;
        for (int i = 0; i < points.length; i++) {
            Point basePoint = points[i];
            for (int j = i + 1; j < points.length; j++) {
                Point candidatePoint = points[j];
                Line line = new Line(basePoint, candidatePoint);
                int length = 2;
                for (int k = j + 1; k < points.length; k++) {
                    Point testPoint = points[k];
                    if (line.match(testPoint))
                        length++;
                }
                if (length > maxLength)
                    maxLength = length;
            }
        }
        return maxLength;
    }

    private static void printPoints(PrintWriter out) {
        for (Point point : Global.points) {
            out.println(point.x + " , " + point.y);
        }
    }


    private static void readPoints(Scanner in, int pointsNum) {
        for (int i = 0; i < pointsNum; i++) {
            try {
                double x = in.nextDouble();
                double y = in.nextDouble();
                Point point = new Point(x, y);
                Global.points.push(point);
            } catch (Exception e) {
            }
        }
    }

    private static void readPointsArray(Scanner in, int pointsNum) {
        for (int i = 0; i < pointsNum; i++) {
            try {
                double x = in.nextDouble();
                double y = in.nextDouble();
                Point point = new Point(x, y);
                Global.pointsArray[i] = point;
            } catch (Exception e) {
            }
        }
    }
}
